package com.ict.web.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ict.common.utils.bean.BeanUtils;
import com.ict.common.utils.uuid.IdUtils;
import com.ict.web.domain.GovernmentDataResources;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;

@Data
public class GovernmentDataResourceAddDto {
    /** 方案id */
    @ApiModelProperty(value = "方案id")
//    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @JsonSerialize(using= ToStringSerializer.class)
    private Long programmeId;

    /** 信息资源名称 */
    @ApiModelProperty(value = "信息资源名称")
//    @NotNull(message = "信息资源名称不能为空")
    private String informationResourceName;

    /** 信息资源来源系统 */
    @ApiModelProperty(value = "信息资源来源系统")
//    @NotNull(message = "信息资源来源系统不能为空")
    private String informationResourceSourceSystem;

    /** 信息资源代码 */
//    @NotNull(message = "信息资源代码不能为空")
    @ApiModelProperty(value = "信息资源代码")
    private String informationResourceCode;

    /** 信息资源提供方 */
    @ApiModelProperty(value = "信息资源提供方")
//    @NotNull(message = "信息资源提供方不能为空")
    private String informationResourceProvider;

    /** 提供方内部部门 */
    @ApiModelProperty(value = "提供方内部部门")
//    @NotNull(message = "提供方内部部门不能为空")
    private String providersInternalDepartment;

    /** 资源提供方代码 */
    @ApiModelProperty(value = "资源提供方代码")
//    @NotNull(message = "资源提供方代码不能为空")
    private String resourceProviderCode;

    /** 信息资源摘要 */
    @ApiModelProperty(value = "信息资源摘要")
//    @NotNull(message = "信息资源摘要不能为空")
    private String summaryOfInformationResources;

    /** 信息资源格式分类 */
    @ApiModelProperty(value = "信息资源格式分类")
//    @NotNull(message = "信息资源格式分类不能为空")
    private String classificationOfInformationResourceFormats;

    /** 信息资源格式类型 */
    @ApiModelProperty(value = "信息资源格式类型")
//    @NotNull(message = "信息资源格式类型不能为空")
    private String informationResourceFormatType;

    /** 其他类型资源格式描述 */
    @ApiModelProperty(value = "其他类型资源格式描述")
    private String other;

    /** 信息项名称 */
    @ApiModelProperty(value = "信息项名称")
//    @NotNull(message = "信息项名称不能为空")
    private String informationItemName;

    /** 数据类型 */
    @ApiModelProperty(value = "数据类型")
//    @NotNull(message = "数据类型不能为空")
    private String typeOfData;

    /** 数据长度 */
    @ApiModelProperty(value = "数据长度")
    private String dataLength;

    /** 共享类型 */
    @ApiModelProperty(value = "共享类型")
//    @NotNull(message = "共享类型不能为空")
    private String shareType;

    /** 共享条件 */
    @ApiModelProperty(value = "共享条件")
//    @NotNull(message = "共享条件不能为空")
    private String sharingConditions;

    /** 共享方式分类 */
    @ApiModelProperty(value = "共享方式分类")
//    @NotNull(message = "共享方式分类不能为空")
    private String sharingModeClassification;

    /** 共享方式类型 */
    @ApiModelProperty(value = "共享方式类型")
//    @NotNull(message = "共享方式类型不能为空")
    private String sharingModeType;

    /** 是否向社会开放 */
    @ApiModelProperty(value = "是否向社会开放")
//    @NotNull(message = "是否向社会开放不能为空")
    private String isOpen;

    /** 开放条件 */
    @ApiModelProperty(value = "开放条件")
//    @NotNull(message = "开放条件不能为空")
    private String openConditions;

    /** 更新周期 */
    @ApiModelProperty(value = "更新周期")
//    @NotNull(message = "更新周期不能为空")
    private String updateCycle;

    /** 发布日期 */
    @ApiModelProperty(value = "发布日期")
//    @NotNull(message = "发布日期不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "gmt+8")
    private LocalDateTime releaseDate;

    /** 平台目录标识 */
    @ApiModelProperty(value = "平台目录标识")
    private String platformDirectoryId;


    /**
     * 将 GovernmentDataResourceAddDto 转化为 GovernmentDataResources
     *
     * @param dto 接收dto
     * @return HotelInfo
     */
    public static GovernmentDataResources of(GovernmentDataResourceAddDto dto){
        GovernmentDataResources bean = new GovernmentDataResources();
        BeanUtils.copyProperties(dto,bean);

        //设置ID
        bean.setGovernmentDataId(IdUtils.snowId());
        //设置创建时间
        bean.setCreateTime(LocalDateTime.now());
        //设置更新
        bean.setUpdateTime(LocalDateTime.now());
        //设置物理删除标记
        bean.setDelFlag("0");

        return bean;
    }
}
